﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CI.Caja.BE;
using System.Data.SqlClient;

namespace CI.Caja.DL
{
    public class DA_Sencillo : IDA_Sencillo
    {
        public BE_Sencillo RegistrarSolicitudSencillo(BE_Sencillo sencillo)
        {
            string sentencia = "INSERT INTO CA_SENCILLO(idSolicitud,idCajero,fecRegistro,horaRegistro,idPuntoVenta,importeCambiado) VALUES (@idSolicitud, @idCajero, convert(char(10),GETDATE(),110), convert(char(10),GETDATE(),108),@idPuntoVenta,@importeCambiado)";
            //SqlTransaction transaccion;
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        //comando.Parameters.Add(new SqlParameter("@idArqueo", arqueo.IdArqueo));
                        sencillo.IdSolicitud = Convert.ToInt32(ObtenerCodigo());
                        comando.Parameters.Add(new SqlParameter("@idSolicitud", sencillo.IdSolicitud));
                        comando.Parameters.Add(new SqlParameter("@idCajero", sencillo.IdCajero));
                        comando.Parameters.Add(new SqlParameter("@idPuntoVenta", sencillo.IdPtoVta));
                        comando.Parameters.Add(new SqlParameter("@importeCambiado", sencillo.ImporteTotal));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }

            }
            return ObtenerSolicitudSencillo(sencillo.IdSolicitud);
        }

        public BE_Sencillo ObtenerSolicitudSencillo(int idSolicitud)
        {
            BE_Sencillo sencillo = null;

            string sentencia = "SELECT idSolicitud,idCajero,fecRegistro,horaRegistro,idPuntoVenta,importeCambiado FROM CA_SENCILLO WHERE idSolicitud=@idSolicitud";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@idSolicitud", idSolicitud));

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        sencillo = new BE_Sencillo();
                        sencillo.IdSolicitud = (int)resultado["idSolicitud"];
                        sencillo.IdCajero = (string)resultado["idCajero"];
                        sencillo.Fecha = (string)resultado["fecRegistro"];
                        sencillo.Hora = (string)resultado["horaRegistro"];
                        sencillo.IdPtoVta = (int)resultado["idPuntoVenta"];
                        sencillo.ImporteTotal = (decimal)resultado["importeCambiado"];

                    }
                }
            }
            return sencillo;
        }

        public string ObtenerCodigo()
        {
            string codigo = "";
            string sentencia = "Select ISNULL(MAX(idSolicitud),0)+1 as Codigo from CA_SENCILLO";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        codigo = resultado["Codigo"].ToString();

                    }
                }
            }
            return codigo;
        }

        ICollection<BE_Sencillo> IDA_Sencillo.ListarSencillo()
        {
            ICollection<BE_Sencillo> lista = new List<BE_Sencillo>();
            BE_Sencillo sencillo = null;

            string sentencia = "SELECT A.idSolicitud,idCajero,fecRegistro,horaRegistro,C.txtNombreMoneda IdMoneda,SUM(B.numCantidad*D.numValor) importeCambiado FROM CA_SENCILLO a INNER JOIN CA_DETALLESENCILLO B ON A.idSolicitud=B.idSolicitud INNER JOIN CA_MONEDA C ON B.idMoneda=C.idMoneda INNER JOIN CA_DENOMINACION D ON B.idDenominacion=D.idDenominacion GROUP BY A.idSolicitud,idCajero,fecRegistro,horaRegistro,C.txtNombreMoneda";
            using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            {
                conexion.Open();
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    SqlDataReader resultado = comando.ExecuteReader();
                    while (resultado.Read())
                    {
                        sencillo = new BE_Sencillo();
                        sencillo.IdSolicitud = (int)resultado["idSolicitud"];
                        sencillo.IdCajero = (string)resultado["idCajero"];
                        sencillo.Fecha = (string)resultado["fecRegistro"];
                        sencillo.Hora = (string)resultado["horaRegistro"];
                        //sencillo.IdPtoVta = (int)resultado["idPuntoVenta"];
                        sencillo.IdMoneda = (string)resultado["IdMoneda"];
                        sencillo.ImporteTotal = (decimal)resultado["importeCambiado"];
                        lista.Add(sencillo);
                    }
                }
            }
            return lista;
        }
    }
}
